Typically, in industrial practice, system or end-to-end application tests are written in terms of steps described in natural language. The tests are intended for use by humans (e.g., the tester, who performs the test steps manually via the application's Graphical. User Interface (GUI)). In order to attain repeatable, predictable, and efficient executions, automated test scripts can be created based on the manual tests, using a general-purpose programming language (e.g., Java, VBScript, or JavaScript programs). These scripts are automatically interpretable and attempt to mimic the user actions on the GUI.
The growing demand for mobile devices combined with the ever expanding variety of options (e.g., manufactures, operating systems, browser types, device dimensions, device capabilities, etc.) has created a growing need for the rigorous and extensive testing of mobile applications. This growing need combined with the time consuming nature of testing has created a further need for streamlined and automated methods of testing. The wide array of applications available cause the testing process to be extremely human intensive. In addition to traditional desktop and web applications, applications can be implemented to run on various platforms, devices, browsers, and often have different variants (e.g., phone and tablet variants, native-app and web-app variants).